
  function(metadata_package_source source_name)
    map_new()
    ans(this)
    map_set(${this} source_name ${source_name})
    map_set(${this} query package_source_query_metadata)
    map_set(${this} resolve package_source_resolve_metadata)
    map_set(${this} pull package_source_pull_metadata)
    map_set(${this} push package_source_push_metadata)
    map_set(${this} add_package_descriptor package_source_metadata_add_descriptor)
    map_new()
    ans(metadata)
    map_set(${this} metadata ${metadata})
    return_ref(this)
  endfunction()
